using System.Collections.Generic;

namespace TBit {
    public enum InstructionArgDataType {
        Register,
        Variable,
        Data,
    }

    public class InstructionArgData {
        public InstructionArgDataType type;
        public RegisterIndex register;
        public Data data;
        public string variable;

        public InstructionArgData(){}
        public InstructionArgData(RegisterIndex v) {
            type = InstructionArgDataType.Register;
            register = v;
        }

        public InstructionArgData(Data v) {
            type = InstructionArgDataType.Data;
            data = v;
        }

        public InstructionArgData(string v) {
            type = InstructionArgDataType.Variable;
            variable = v;
        }

    }

    public class Instruction {
        public Opcode opcode;
        public List<InstructionArgData> args = new List<InstructionArgData>();
    }
}